package sistemaDefensivo;

import comunicacion.Cliente;
import comunicacion.Mensaje;
import comunicacion.Servidor;

public class RespuestaAtaque implements Runnable {

	private Mensaje msjEnemigo;
	private Cliente clientSistBat;
	private Servidor serverRespAttk;
	private ServidorTerrestre servidorTerrestre;
	
	public RespuestaAtaque(ServidorTerrestre servT, Mensaje msjEnemigo){
		this.servidorTerrestre = servT;
		this.msjEnemigo = msjEnemigo;
	}
	
	private int calculoCoordenada (double x, double y){
		if(x>=0 && y>=0){
//			si x < y el misil enemigo se aproxima por el NORTE ( 0 )
			if(x <= y){
				return 0;	
			}
			else
//				si y < x el misil enemigo se aproxima por el ESTE ( 1 )
				return 1;
		}
		
		if(x>=0 && y<=0){
//			si x > (-y) el misil enemigo se aproxima por el ESTE ( 1 )
			if(x >= (-y)){
				return 1;	
			}
			else
//				si (-y) > x el misil enemigo se aproxima por el SUR ( 2 )
				return 2;
		}
		
		if(x<=0 && y<=0){
//			si x > y el misil enemigo se aproxima por el SUR ( 2 )
			if(x >= y){
				return 2;	
			}
			else
//				si y > x el misil enemigo se aproxima por el OESTE ( 3 )
				return 3;
		}
		
		if(x<=0 && y>=0){
//			si (-x) > y el misil enemigo se aproxima por el OESTE ( 3 )
			if((-x) >= y){
				return 3;	
			}
			else
//				si y > (-x) el misil enemigo se aproxima por el NORTE ( 0 )
				return 0;
		}
		return 0;
	}
	
	@Override
	public void run() {
		int flag = 0;
//		System.out.println("\nRESPUESTA ATAQUE dice =====> Se lanzo respuesta para el misil:" + msjEnemigo.getId());
		serverRespAttk = new Servidor(0);
		serverRespAttk.abrirServidor();
//		System.out.println("\nRESPUESTA ATAQUE dice ===================> Puerto de comunicacion de la RESPUESTA ATAQUE para el misil " + 
//				msjEnemigo.getId() + " es: " + serverRespAttk.getPort());
		clientSistBat = new Cliente("localhost", 6000);
		clientSistBat.createClient();
		clientSistBat.sendDataInt(serverRespAttk.getPort());

//		Calculo de coordenada de origen para seleccion de bateria a disparar
//		ENVIO ENTERO REPRESENTATIVO DE LA COORDENADA DE ORIGEN
		clientSistBat.sendDataInt(this.calculoCoordenada(msjEnemigo.getX(), msjEnemigo.getY()));
		
		clientSistBat.close();

		serverRespAttk.conectar();
		serverRespAttk.sendObject(msjEnemigo);
		serverRespAttk.closeSocket();

		while(flag != -1){
			serverRespAttk.conectar();
			flag = serverRespAttk.readDataInt();
//			System.out.println("\nRESPUESTA ATAQUE del Misil: " + msjEnemigo.getId() + "  dice =====> Recibi KeepAlive del MISIL DEFENSOR: " + flag);
			serverRespAttk.closeSocket();
			
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println("\nRESPUESTA ATAQUE dice ===================> La Respuesta Ataque para el Misil Enemigo:" + msjEnemigo.getId() + " MURIO!!!!");
		servidorTerrestre.removerRespuesta(msjEnemigo.getId());
	}
}